home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / TGE129C.ZIP / SOURCE / VCOORD.H < prev   
C/C++ Source or Header  |  1993-08-20  |  5KB  |  191 lines

  1. /*****************************************************************************
  2. *       The Graphics Engine version 1.29ßC                                   *
  3. *                                                                            *
  4. *       The Graphics Engine code and documentation are Copyright (c) 1993    *
  5. *       by Matthew Hildebrand.                                               *
  6. *                                                                            *
  7. *       Unauthorised usage or modification of any or all of The Graphics     *
  8. *       Engine is strictly prohibited.                                       *
  9. *****************************************************************************/
  10.  
  11. #ifndef VCOORDdotH
  12. #define VCOORDdotH
  13.  
  14.  
  15. //*****
  16. //***** Virtual coordinate handling class
  17. //*****
  18.  
  19. class VirtualCoord
  20. {
  21.   unsigned virtMaxX, virtMaxY, realMaxX, realMaxY;
  22. public:
  23.   inline VirtualCoord(void) { ; }
  24.   inline VirtualCoord(unsigned virtMaxx, unsigned virtMaxy, unsigned
  25.       realMaxx, unsigned realMaxy);
  26.   inline void virtParams(unsigned virtMaxx, unsigned virtMaxy);
  27.   inline void realParams(unsigned realMaxx, unsigned realMaxy);
  28.   inline void virtParams(unsigned *virtMaxx, unsigned *virtMaxy);
  29.   inline void realParams(unsigned *realMaxx, unsigned *realMaxy);
  30.   inline void realCoords(unsigned virtX, unsigned virtY, unsigned *realX,
  31.       unsigned *realY);
  32.   inline unsigned realX(unsigned virtX);
  33.   inline unsigned realY(unsigned virtY);
  34.   inline void virtCoords(unsigned realX, unsigned realY, unsigned *virtX,
  35.       unsigned *virtY);
  36.   inline unsigned virtX(unsigned realX);
  37.   inline unsigned virtY(unsigned realY);
  38. };
  39.  
  40.  
  41. //*****
  42. //***** Constructor
  43. //*****
  44.  
  45. inline VirtualCoord::VirtualCoord(unsigned virtMaxx, unsigned virtMaxy,
  46.     unsigned realMaxx, unsigned realMaxy)
  47. {
  48.   virtMaxX = virtMaxx;
  49.   virtMaxY = virtMaxy;
  50.   realMaxX = realMaxx;
  51.   realMaxY = realMaxy;
  52. }
  53.  
  54.  
  55. //*****
  56. //***** Routines to set the virtual and real maximums
  57. //*****
  58.  
  59. inline void VirtualCoord::virtParams(unsigned virtMaxx, unsigned virtMaxy)
  60. {
  61.   virtMaxX = virtMaxx;
  62.   virtMaxY = virtMaxy;
  63. }
  64.  
  65. inline void VirtualCoord::realParams(unsigned realMaxx, unsigned realMaxy)
  66. {
  67.   realMaxX = realMaxx;
  68.   realMaxY = realMaxy;
  69. }
  70.  
  71.  
  72. //*****
  73. //***** Routines to get the virtual and real maximums
  74. //*****
  75.  
  76. inline void VirtualCoord::virtParams(unsigned *virtMaxx, unsigned *virtMaxy)
  77. {
  78.   *virtMaxx = virtMaxX;
  79.   *virtMaxy = virtMaxY;
  80. }
  81.  
  82. inline void VirtualCoord::realParams(unsigned *realMaxx, unsigned *realMaxy)
  83. {
  84.   *realMaxx = realMaxX;
  85.   *realMaxy = realMaxY;
  86. }
  87.  
  88.  
  89. //*****
  90. //***** Calculate the real coordinates, given the virtual coordinates.
  91. //*****
  92.  
  93. inline void VirtualCoord::realCoords(unsigned virtX, unsigned virtY,
  94.     unsigned *realX, unsigned *realY)
  95. {
  96.   //*** x-coordinate
  97.   *realX = (unsigned) (((long)virtX * (long)realMaxX) / (long)virtMaxX);
  98.   if ((((long)virtX*realMaxX)%virtMaxX >= virtMaxX/2) && (*realX<realMaxX))
  99.     *realX++;
  100.  
  101.   //*** y-coordinate
  102.   *realY = (unsigned) (((long)virtY * (long)realMaxY) / (long)virtMaxY);
  103.   if ((((long)virtY*realMaxY)%virtMaxY >= virtMaxY/2) && (*realY<realMaxY))
  104.     *realY++;
  105. }
  106.  
  107.  
  108. //*****
  109. //***** Calculate the real x-coordinate, given the virtual x-coordinate.
  110. //*****
  111.  
  112. inline unsigned VirtualCoord::realX(unsigned virtX)
  113. {
  114.   register unsigned realX;
  115.  
  116.   realX = (unsigned) (((long)virtX * (long)realMaxX) / (long)virtMaxX);
  117.   if ((((long)virtX*realMaxX)%virtMaxX >= virtMaxX/2) && (realX<realMaxX))
  118.     realX++;
  119.  
  120.   return (realX);
  121. }
  122.  
  123.  
  124. //*****
  125. //***** Calculate the real y-coordinate, given the virtual y-coordinate.
  126. //*****
  127.  
  128. inline unsigned VirtualCoord::realY(unsigned virtY)
  129. {
  130.   register unsigned realY;
  131.  
  132.   realY = (unsigned) (((long)virtY * (long)realMaxY) / (long)virtMaxY);
  133.   if ((((long)virtY*realMaxY)%virtMaxY >= virtMaxY/2) && (realY<realMaxY))
  134.     realY++;
  135.  
  136.   return (realY);
  137. }
  138.  
  139.  
  140. //*****
  141. //***** Calculate the virtual coordinates, given the real coordinates.
  142. //*****
  143.  
  144. inline void VirtualCoord::virtCoords(unsigned realX, unsigned realY,
  145.     unsigned *virtX, unsigned *virtY)
  146. {
  147.   //*** x-coordinate
  148.   *virtX = (unsigned) (((long)realX * (long)virtMaxX) / (long)realMaxX);
  149.   if ((((long)realX*virtMaxX)%realMaxX >= realMaxX/2) && (*virtX<virtMaxX))
  150.     *virtX++;
  151.  
  152.   //*** y-coordinate
  153.   *virtY = (unsigned) (((long)realY * (long)virtMaxY) / (long)realMaxY);
  154.   if ((((long)realY*virtMaxY)%realMaxY >= realMaxY/2) && (*virtY<virtMaxY))
  155.     *virtY++;
  156. }
  157.  
  158.  
  159. //*****
  160. //***** Calculate the virtual x-coordinate, given the real x-coordinate
  161. //*****
  162.  
  163. inline unsigned VirtualCoord::virtX(unsigned realX)
  164. {
  165.   register unsigned virtX;
  166.  
  167.   virtX = (unsigned) (((long)realX * (long)virtMaxX) / (long)realMaxX);
  168.   if ((((long)realX*virtMaxX)%realMaxX >= realMaxX/2) && (virtX<virtMaxX))
  169.     virtX++;
  170.  
  171.   return (virtX);
  172. }
  173.  
  174.  
  175. //*****
  176. //***** Calculate the virtual y-coordinate, given the real y-coordinate
  177. //*****
  178.  
  179. inline unsigned VirtualCoord::virtY(unsigned realY)
  180. {
  181.   register unsigned virtY;
  182.  
  183.   virtY = (unsigned) (((long)realY * (long)virtMaxY) / (long)realMaxY);
  184.   if ((((long)realY*virtMaxY)%realMaxY >= realMaxY/2) && (virtY<virtMaxY))
  185.     virtY++;
  186.  
  187.   return (virtY);
  188. }
  189.  
  190.  
  191. #endif